import type { Component } from 'vue'

/**
 * 确认对话框类型枚举
 */
export type ConfirmDialogType = 'delete' | 'warning' | 'info' | 'success'

/**
 * 删除类型枚举
 */
export type DeleteType = 'single' | 'batch'

/**
 * 按钮类型枚举
 */
export type ButtonType = 'primary' | 'danger' | 'warning' | 'success' | 'info'

/**
 * CrudConfirmDialog 组件的 Props 接口
 */
export interface CrudConfirmDialogProps {
  /** 对话框显示状态 */
  visible: boolean
  
  /** 确认按钮加载状态 */
  loading?: boolean
  
  /** 预设配置名称 */
  preset?: string
  
  /** 对话框标题 */
  title?: string
  
  /** 对话框类型 */
  type?: ConfirmDialogType
  
  /** 删除类型 */
  deleteType?: DeleteType
  
  /** 单个删除时的目标名称 */
  targetName?: string
  
  /** 批量删除时的选中数量 */
  selectedCount?: number
  
  /** 自定义确认内容 */
  content?: string
  
  /** 警告提示文案 */
  warningTip?: string
  
  /** 确认按钮文案 */
  confirmText?: string
  
  /** 取消按钮文案 */
  cancelText?: string
  
  /** 确认按钮类型 */
  confirmType?: ButtonType
  
  /** 自定义图标 */
  icon?: string | Component
  
  /** 图标颜色 */
  iconColor?: string
  
  /** 图标大小 */
  iconSize?: number
  
  /** 对话框宽度 */
  width?: string
}

/**
 * CrudConfirmDialog 组件的事件接口
 */
export interface CrudConfirmDialogEvents {
  /** 显示状态变化事件 */
  'update:visible': [visible: boolean]
  
  /** 确认操作事件 */
  'confirm': []
  
  /** 取消操作事件 */
  'cancel': []
}

/**
 * 类型配置接口
 */
export interface TypeConfig {
  /** 图标组件 */
  icon: Component
  
  /** 图标颜色 */
  iconColor: string
  
  /** 确认按钮类型 */
  confirmType: ButtonType
  
  /** 默认警告提示 */
  warningTip?: string
}

/**
 * 预设配置接口
 */
export interface PresetConfig {
  /** 对话框类型 */
  type: ConfirmDialogType
  
  /** 对话框标题 */
  title: string
  
  /** 确认按钮文案 */
  confirmText: string
  
  /** 自定义内容 */
  content?: string
  
  /** 警告提示 */
  warningTip?: string
  
  /** 确认按钮类型 */
  confirmType?: ButtonType
}